<?php
/**
 * アプリケーションプロセスクラス定義ファイル
 * 
 */

/**
 * アプリケーションプロセス基底クラス
 *
 */
abstract class AppProcess {
	/**
	 * 設定情報オブジェクト
	 *
	 * @var SimpleXMLElement
	 */
	protected $setting = null;

	/**
	 * セッションクラス
	 *
	 * @var Session
	 */
	protected $session = null;

	/**
	 * リクエストクラス
	 *
	 * @var Request
	 */
	protected $request = null;

	/**
	 * レスポンスクラス
	 *
	 * @var Response
	 */
	protected $response = null;

	/**
	 * バリューオブジェクト
	 *
	 * @var SimpleXMLElement
	 */
	protected $VO = null;

	/**
	 * アクション名
	 *
	 * @var string
	 */
	protected $act = '';

	/**
	 * コンストラクタ
	 *
	 * @param SimpleXMLElement $stg 設定情報オブジェクト
	 * @param Session $sess セッションクラス
	 * @param Request $req リクエストクラス
	 * @param Response $res レスポンスクラス
	 * @param SimpleXMLElement $vobj バリューオブジェクト
	 * @param string $act アクション名
	 */
	function __construct($stg, $sess, $req, $res, $vo, $act) {
		$this->setting = $stg;
		$this->session = $sess;
		$this->request = $req;
		$this->response = $res;
		$this->VO = $vo;
		$this->act = $act;
	}

	/**
	 * 前処理
	 *
	 */
	protected function preProcess() {
		// レスポンスクラスが必要とするVO->responseを作成
		$this->VO->addChild('response');
	}

	/**
	 * プロセスを走らせる
	 * 
	 * このメソッドは継承先で必ず実装しなくてはならない
	 *
	 */
	abstract protected function run();

	/**
	 * 後処理
	 *
	 */
	protected function postProcess() {
		// VO->responseをResponseクラスに"RES"として割り付ける
		$this->response->assign('RES', $this->VO->response);
		// バリデータ使われたのならVO->validatorをResponseクラスに"VDT"として割り付ける
		if ($this->VO->validator) {
			$this->response->assign('VDT', $this->VO->validator);
		}
		// xmlModeが有効ならHTTPステータスコードをResponseクラスに"HSC"として割り付ける
		if ($this->request->xmlMode == 'true') {
			if ($this->VO->validator->errcount > 0) {
				// HTTPステータスコード '400 bad request'
				$this->response->assign('HSC','400');
			} else {
				// HTTPステータスコード '200 OK'
				$this->response->assign('HSC','200');
			}
		}
	}

	/**
	 * 実行部
	 *
	 * コントローラから呼び出される
	 */
	public function execute() {
		$this->preProcess();
		$result = $this->run();
		$this->postProcess();
		return $result;
	}
}
